Dynamic SQL হলো একটি পদ্ধতি যেখানে SQL কুয়েরি চলানোর সময় কুয়েরির কিছু অংশ চলমান সময়ের ডেটা বা কন্ডিশন অনুসারে তৈরি হয়। এটি খুবই উপকারী যখন আপনি টেবিল বা কলামের নাম পরিবর্তন করতে চান বা একটি কুয়েরি চালানোর সময় ব্যবহারকারীর ইনপুটের উপর ভিত্তি করে কুয়েরি গঠন করতে চান।
T-SQL-এ Dynamic SQL তৈরি করতে sp_executesql অথবা EXEC ব্যবহার করা হয়।
১. Basic Dynamic SQL
নিচে একটি সিম্পল উদাহরণ দেওয়া হলো যেখানে একটি ডাইনামিক কুয়েরি তৈরি করা হচ্ছে এবং sp_executesql ব্যবহার করা হচ্ছে।
উদাহরণ:
ধরা যাক, আপনার একটি Employees টেবিল রয়েছে এবং আপনি কলাম এবং শর্ত অনুযায়ী ডেটা অনুসন্ধান করতে চান।
DECLARE @SQLQuery NVARCHAR(MAX);
DECLARE @ColumnName NVARCHAR(50) = 'FirstName'; -- কলামের নাম
DECLARE @Value NVARCHAR(50) = 'John'; -- মান যা অনুসন্ধান করা হবে
-- Dynamic SQL কুয়েরি তৈরি
SET @SQLQuery = N'SELECT * FROM Employees WHERE ' + @ColumnName + ' = @Value';
-- Dynamic SQL এক্সিকিউট করা
EXEC sp_executesql @SQLQuery, N'@Value NVARCHAR(50)', @Value;
এখানে:
@ColumnNameএবং@Valueদ্বারা টেবিলের কলাম এবং মান নির্ধারণ করা হয়েছে।sp_executesqlব্যবহার করে কুয়েরিটি চালানো হয়েছে, যেখানে@Valueপ্যারামিটার হিসেবে পাস করা হয়েছে।
এই উদাহরণে, FirstName কলামে 'John' মান খুঁজে বের করা হবে।
২. Dynamic SQL with Multiple Conditions
ধরা যাক, আপনি একটি কন্ডিশনাল ডাইনামিক SQL তৈরি করতে চান যেখানে ব্যবহারকারী একাধিক শর্ত অনুসারে ডেটা অনুসন্ধান করতে পারেন।
DECLARE @SQLQuery NVARCHAR(MAX);
DECLARE @TableName NVARCHAR(50) = 'Employees'; -- টেবিলের নাম
DECLARE @Department NVARCHAR(50) = 'HR'; -- বিভাগের নাম
DECLARE @MinSalary INT = 50000; -- সর্বনিম্ন বেতন
-- Dynamic SQL কুয়েরি তৈরি
SET @SQLQuery = N'SELECT * FROM ' + @TableName +
N' WHERE Department = @Department AND Salary >= @MinSalary';
-- Dynamic SQL এক্সিকিউট করা
EXEC sp_executesql @SQLQuery,
N'@Department NVARCHAR(50), @MinSalary INT',
@Department, @MinSalary;
এখানে:
@TableName,@Department, এবং@MinSalaryপ্যারামিটার ব্যবহার করা হয়েছে।sp_executesqlব্যবহার করে কুয়েরিটি এক্সিকিউট করা হয়েছে এবং প্যারামিটার পাস করা হয়েছে।
এটি Employees টেবিল থেকে HR বিভাগ এবং 50000 বা তার বেশি বেতন পাওয়া কর্মচারীদের নির্বাচন করবে।
৩. Dynamic SQL with Table and Column Names
Dynamic SQL এর আরেকটি উপকারিতা হলো আপনি টেবিল এবং কলামের নামও ডাইনামিকভাবে নির্ধারণ করতে পারেন। নিম্নলিখিত উদাহরণে টেবিল এবং কলাম নামের উপর ভিত্তি করে ডাইনামিক SQL তৈরি করা হচ্ছে।
উদাহরণ:
DECLARE @SQLQuery NVARCHAR(MAX);
DECLARE @TableName NVARCHAR(50) = 'Employees'; -- টেবিলের নাম
DECLARE @ColumnName NVARCHAR(50) = 'Salary'; -- কলামের নাম
DECLARE @Value INT = 60000; -- মান যা অনুসন্ধান করা হবে
-- Dynamic SQL কুয়েরি তৈরি
SET @SQLQuery = N'SELECT * FROM ' + @TableName +
N' WHERE ' + @ColumnName + N' >= @Value';
-- Dynamic SQL এক্সিকিউট করা
EXEC sp_executesql @SQLQuery, N'@Value INT', @Value;
এখানে:
@TableNameএবং@ColumnNameডাইনামিকভাবে টেবিল এবং কলামের নাম নির্বাচন করে।sp_executesqlব্যবহার করা হচ্ছে যাতে ডাইনামিক SQL এক্সিকিউট করা হয়।
এই উদাহরণে, Employees টেবিল থেকে Salary কলামে 60000 বা তার বেশি বেতন পাওয়া কর্মচারীদের নির্বাচন করা হবে।
৪. Dynamic SQL with INSERT, UPDATE, and DELETE
Dynamic SQL ব্যবহার করে আপনি INSERT, UPDATE, এবং DELETE অপারেশনও করতে পারেন। এখানে একটি উদাহরণ দেওয়া হলো যেখানে একটি টেবিলের ডেটা আপডেট করার জন্য Dynamic SQL তৈরি করা হচ্ছে।
উদাহরণ: UPDATE Statement with Dynamic SQL
DECLARE @SQLQuery NVARCHAR(MAX);
DECLARE @TableName NVARCHAR(50) = 'Employees';
DECLARE @NewSalary INT = 70000;
DECLARE @Department NVARCHAR(50) = 'IT';
-- Dynamic SQL কুয়েরি তৈরি
SET @SQLQuery = N'UPDATE ' + @TableName +
N' SET Salary = @NewSalary WHERE Department = @Department';
-- Dynamic SQL এক্সিকিউট করা
EXEC sp_executesql @SQLQuery,
N'@NewSalary INT, @Department NVARCHAR(50)',
@NewSalary, @Department;
এখানে:
UPDATEঅপারেশনটিEmployeesটেবিলেDepartmentকলামের জন্যSalaryআপডেট করতে ব্যবহৃত হচ্ছে।sp_executesqlদিয়ে ডাইনামিক SQL এক্সিকিউট করা হয়েছে।
সারাংশ
Dynamic SQL হলো একটি প্রক্রিয়া যেখানে SQL কুয়েরি চলাকালীন সময়ে কুয়েরির কিছু অংশ ডাইনামিকভাবে তৈরি হয়, যা সাধারণত sp_executesql অথবা EXEC স্টেটমেন্ট দিয়ে পরিচালিত হয়। এটি খুবই উপকারী যখন:
- আপনি টেবিল, কলাম বা শর্ত পরিবর্তন করতে চান।
- ব্যবহারকারীর ইনপুটের উপর ভিত্তি করে SQL কুয়েরি গঠন করতে চান।
তবে, ডাইনামিক SQL ব্যবহারে কিছু নিরাপত্তা ঝুঁকি (যেমন SQL Injection) থাকতে পারে, তাই এটি সাবধানে ব্যবহার করা উচিত এবং সঠিক প্যারামিটারাইজড কুয়েরি ব্যবহার করা গুরুত্বপূর্ণ।
Read more